Node.js 多版本管理:nvm、n 与 Volta
同一个开发机上,不同项目对 Node.js 版本的要求经常不一致:老项目锁着 18,新工具链(例如较新版本的 VitePress)已经要求 22 以上。本文对比三种主流的 Node.js 版本管理器——nvm、n 与 Volta,覆盖安装方式、常用命令与选型建议,读完可以按自己的使用习惯选定一个并完成配置。
nvm:功能最全的事实标准
nvm(Node Version Manager)是最流行的版本管理工具,通过 shell 函数拦截 node 命令实现版本切换。
安装
Linux / macOS:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 或
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 加载 nvm
source ~/.bashrc # zsh 用户执行 source ~/.zshrc Windows 需要改用移植版 nvm-windows:下载 nvm-setup.exe 安装,之后在管理员权限的 PowerShell 或 CMD 中使用。
常用命令
nvm list-remote # 列出所有可安装的版本(Windows 为 nvm list available)
nvm install --lts # 安装最新 LTS 版本
nvm install 22 # 安装指定大版本
nvm install 18.19.0 # 安装指定完整版本
nvm list # 列出已安装的版本
nvm use 22 # 切换版本(仅当前 shell 生效)
nvm alias default 22 # 设置默认版本
nvm current # 查看当前版本
nvm exec 22 node -v # 在指定版本下执行命令
nvm uninstall 16 # 卸载版本 项目级版本锁定
在项目根目录放一个 .nvmrc,内容只写版本号:
22 进入项目目录后执行 nvm use 会自动读取它切到对应版本,nvm install 则安装缺失的版本。团队协作时把这个文件提交进仓库,所有人都能对齐版本。
n:最简单的选择
n 是一个极简的版本管理器,安装与切换都是一条命令,代价是需要先有一个可用的 Node.js(或用脚本安装)。
# 安装 n(方式一:已有 Node.js 时)
sudo npm install -g n
# 安装 n(方式二:官方脚本)
curl -L https://bit.ly/n-install | bash 常用命令:
sudo n lts # 安装最新 LTS
sudo n latest # 安装最新版
sudo n 22 # 安装指定版本
n list # 列出已安装版本
sudo n # 交互式选择版本
sudo n rm 16.0.0 # 删除指定版本
sudo n prune # 删除除当前版本外的所有版本 n 通过替换全局的 node 二进制实现切换,系统级生效、无需 shell 集成,但一次只能有一个「当前版本」,没有按项目自动切换的能力。
Volta:按项目自动切换
Volta 把版本管理做成了工具链层面的能力:进入项目目录时自动切换到该项目固定的 Node.js 与包管理器版本,无需手动操作。
# Linux / macOS 安装
curl https://get.volta.sh | bash
# Windows 从官网下载安装程序
# https://docs.volta.sh/guide/getting-started 常用命令:
volta install node@22 # 安装某个版本并设为默认
volta install node@lts # 安装最新 LTS 并设为默认
volta pin node@22 # 把当前项目的 Node 版本固定为 22
volta install npm@10 # 安装并固定 npm 版本
volta pin npm@10 # 固定当前项目的 npm
volta list # 列出已安装的工具 volta pin 会把版本写进项目 package.json 的 volta 字段,提交后团队成员用 Volta 时自动获得相同工具链。它的优势就是省心:不依赖 shell 集成,切换无感,代价是概念比 nvm 多一层(默认工具链与项目固定)。
三者对比与选型
| 特性 | nvm | n | Volta |
|---|---|---|---|
| 安装难度 | 低 | 极低 | 低 |
| 切换方式 | shell 内切换,需手动或配 shell 集成 | 替换全局二进制,系统级 | 进入目录自动切换 |
| 项目级固定 | .nvmrc(需手动 nvm use) | 不支持 | volta pin 写入 package.json,自动生效 |
| 跨平台 | Linux/macOS(Windows 用 nvm-windows) | Linux/macOS | Linux/macOS/Windows |
| 社区生态 | 最大 | 中等 | 较小但增长中 |
选型建议:
- 日常使用选 nvm:功能完善、资料最多,
.nvmrc已经能覆盖多数场景; - 追求无感切换选 Volta:多项目频繁切换时自动固定版本的价值最大;
- 只想快速装个版本、不在乎自动切换,选 n:命令最少,上手最快。
小结
版本管理器解决的是「一台机器多个 Node.js 共存与对齐」的问题:nvm 靠 shell 切换加 .nvmrc 锁定,n 用全局替换换简单,Volta 用工具链固定换无感。三者取一即可,不建议混装。顺带一提,如果诉求不限于 Node.js——比如同一台机器上要管理 cmake、gcc 这类系统程序的多版本——Debian 系还提供 update-alternatives 这类系统级方案,思路相通,粒度不同。